package ore.example.pokemoninfo.utils;
import com.pixelmonmod.pixelmon.api.moveskills.MoveSkill;
import com.pixelmonmod.pixelmon.api.pokemon.Pokemon;
import com.pixelmonmod.pixelmon.api.pokemon.species.moves.Moves;
import com.pixelmonmod.pixelmon.api.pokemon.stats.BattleStatsType;
import com.pixelmonmod.pixelmon.api.pokemon.stats.Moveset;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class PlaceholderUtil {
    public static String replacePlaceholders(String line, Pokemon pokemon) {
        Map<String,String> placeholders = new HashMap<>();
        // 个体值相关
        // 等级
        String genderText;
        switch (pokemon.getGender()) {
            case MALE -> genderText = "♂公";
            case FEMALE -> genderText = "♀母";
            default -> genderText = "无性别";
        }
// 获取所有 IV 的数组
        int[] ivArray = pokemon.getStats().getIVs().getArray(); // 长度6

// 当前 IV 总和
        int currentSum = Arrays.stream(ivArray).sum();

// 最大 IV 总和
        int maxSum = 31 * ivArray.length; // 31 * 6 = 186

// 百分比
        double percent = (currentSum * 100.0) / maxSum;

// 保留整数百分比
        String ivProgress = String.format("%.0f%%", percent);
        placeholders.put("%Level%", String.valueOf(pokemon.getPokemonLevel()));
// 获取 EV 数组
        int [] evArray = pokemon.getStats().getEVs().getArray();
        // 统计当前EV总和
        int currentEvsSum = Arrays.stream(evArray).sum();
// 最大 EV 总和（官方限制）
        int maxEVSum = 510;
// 百分比
        double evPercent = (currentEvsSum * 100.0) / maxEVSum;
// 转成字符串，带百分号
        String evProgress = String.format("%.0f%%", evPercent);
// 放入占位符
        placeholders.put("%EVS_SUM%", evProgress);// 个体值 IVS


        placeholders.put("%IVS_SUM%", ivProgress);
        placeholders.put("%IVS_HP%", String.valueOf(pokemon.getStats().getIVs().getStat(BattleStatsType.HP)));
        placeholders.put("%IVS_Attack%", String.valueOf(pokemon.getStats().getIVs().getStat(BattleStatsType.ATTACK)));
        placeholders.put("%IVS_Defence%", String.valueOf(pokemon.getStats().getIVs().getStat(BattleStatsType.DEFENSE)));
        placeholders.put("%IVS_Speed%", String.valueOf(pokemon.getStats().getIVs().getStat(BattleStatsType.SPEED)));
        placeholders.put("%IVS_SpecialAttack%", String.valueOf(pokemon.getStats().getIVs().getStat(BattleStatsType.SPECIAL_ATTACK)));
        placeholders.put("%IVS_SpecialDefence%", String.valueOf(pokemon.getStats().getIVs().getStat(BattleStatsType.SPECIAL_DEFENSE)));

// 努力值 EVS
        placeholders.put("%EVS_SUM%", evProgress);
        placeholders.put("%EVS_HP%", String.valueOf(pokemon.getStats().getEVs().getStat(BattleStatsType.HP)));
        placeholders.put("%EVS_Attack%", String.valueOf(pokemon.getStats().getEVs().getStat(BattleStatsType.ATTACK)));
        placeholders.put("%EVS_Defence%", String.valueOf(pokemon.getStats().getEVs().getStat(BattleStatsType.DEFENSE)));
        placeholders.put("%EVS_Speed%", String.valueOf(pokemon.getStats().getEVs().getStat(BattleStatsType.SPEED)));
        placeholders.put("%EVS_SpecialAttack%", String.valueOf(pokemon.getStats().getEVs().getStat(BattleStatsType.SPECIAL_ATTACK)));
        placeholders.put("%EVS_SpecialDefence%", String.valueOf(pokemon.getStats().getEVs().getStat(BattleStatsType.SPECIAL_DEFENSE)));

// 基础信息
        placeholders.put("%Shiny%", pokemon.isShiny() ? "是" : "否"); //闪光
        placeholders.put("%Ability%", pokemon.getAbility().getTranslatedName().getString());
        placeholders.put("%Nature%", pokemon.getNature().getTranslatedName().getString());
        placeholders.put("%Growth%", pokemon.getGrowth().value().getName().getString()); // 可根据需求转中文
        placeholders.put("%Gender%", genderText); //
        placeholders.put("%Nick_Name%", pokemon.getDisplayName().getString()); // 昵称
        Moveset moveset = pokemon.getMoveset();
// 第1个技能
        placeholders.put("%Move1%", (moveset.size() > 0 && moveset.getFirst().getMove() != null)
                ? moveset.getFirst().getMove().getTranslatedName().getString()
                : "");
// 第2个技能
        placeholders.put("%Move2%", (moveset.size() > 1 && moveset.get(1).getMove() != null)
                ? moveset.get(1).getMove().getTranslatedName().getString()
                : "");
// 第3个技能
        placeholders.put("%Move3%", (moveset.size() > 2 && moveset.get(2).getMove() != null)
                ? moveset.get(2).getMove().getTranslatedName().getString()
                : "");
// 第4个技能（最后一个）
        placeholders.put("%Move4%", (moveset.size() > 3 && moveset.get(3).getMove() != null)
                ? moveset.get(3).getMove().getTranslatedName().getString()
                : "");

        for (Map.Entry<String, String> entry : placeholders.entrySet()) {
            line = line.replace(entry.getKey(), entry.getValue());
        }
        return line;
    }
}
